/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package upeu.cepre.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID;
import upeu.cepre.business.*;
import upeu.cepre.model.*;

/**
 *
 * @author Elvis Zanguetsu
 */
@WebServlet(name = "AdmnistradorController", urlPatterns = {"/AdmnistradorController"})
public class AdmnistradorController extends HttpServlet {

    int opt;
    String periodo;
    String sede;
    String usuario;
    String trabajador;
    String rol;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        periodo = request.getParameter("Periodo");
        opt = Integer.parseInt(request.getParameter("opt"));
        usuario = request.getParameter("Usuario");

        ExamenesManger examenesManag = new ExamenesManger();
        List<Examenes> examenes = new ArrayList<Examenes>();
        Examenes examenesTo = new Examenes();

        List<DetallePeriodoSede> listDetallePeriodoSede = new ArrayList<DetallePeriodoSede>();

        DetallePeriodoAlumnoManager periodoAlumnoManag = new DetallePeriodoAlumnoManager();
        List<DetallePeriodoAlumno> detallePeriodoAlumnos = new ArrayList<DetallePeriodoAlumno>();
 
        List<DetallePeriodoTrabajador> detallePeriodoTrabajadores = new ArrayList<DetallePeriodoTrabajador>();
        
        DetalleAlumnoExamenManager detalleAlumnoExamenmanag = new DetalleAlumnoExamenManager();
        List<DetalleAlumnoExamen> detalleAlumnoExamenes = new ArrayList<DetalleAlumnoExamen>();
        DetalleAlumnoExamen detalleAlumnoExamenTO = new DetalleAlumnoExamen();

        Sede sedeTo = new Sede();
        SedeManager sedeManag = new SedeManager();
        List<Sede> listSede = new ArrayList<Sede>();

        TrabajadorManager trabajadorManag = new TrabajadorManager();
        List<Trabajador> listTrabajador = new ArrayList<Trabajador>();
        Trabajador trabajadorTo = new Trabajador();

        List<DetalleSedeTrabajador> listDetalleSedeTrabajador = new ArrayList<DetalleSedeTrabajador>();
        
        DetallePeriodoTrabajadorManager periodoTrabajadorManag = new DetallePeriodoTrabajadorManager();
        DetallePeriodoCursoManager periodoCursoManag = new DetallePeriodoCursoManager();
        List<DetallePeriodoCurso> detallePeriodoCursos = new ArrayList<DetallePeriodoCurso>();
        DetalleAlumnoCursoManager detalleAlumnoCursoManag = new DetalleAlumnoCursoManager();
        List<DetalleAlumnoCurso> listAlumnoCurso = new ArrayList<DetalleAlumnoCurso>();
        DetallePeriodoSedeManager detallePeriodoSedeManag = new DetallePeriodoSedeManager();
        DetalleSedeTrabajador detalleSedeTrabajador = new DetalleSedeTrabajador();
        DetallePeriodoTrabajador detallePeriodoTrabajador = new DetallePeriodoTrabajador();
        DetalleSedeTrabajadorManager detalleSedeTrabajadroManager = new DetalleSedeTrabajadorManager();
        DetallePeriodoSede detallePeriodoSede = new DetallePeriodoSede();



        sede = sedeManag.finByNombre(request.getParameter("Sede")).getIdSede();
        trabajador = trabajadorManag.finByUser(usuario).getIdTrabajador();
        rol = periodoTrabajadorManag.findByIdtrabajadorANDByIdperiodo(trabajador, periodo).getRol();


        switch (opt) {

            case 1: {

                examenes = examenesManag.findByIdPeriodo(periodo);
                request.getSession().setAttribute("ListExamenes", examenes);
                detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);
                request.getSession().setAttribute("ListAlumnos", detallePeriodoAlumnos);
                detalleAlumnoExamenes = detalleAlumnoExamenmanag.Report();
                request.getSession().setAttribute("ListPeriodoAlumnosExamenes", detalleAlumnoExamenes);
                response.sendRedirect("modulos/administrador/administrador_report_examen_semanal.jsp");
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);

            }
            break;

            case 2: {



                detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);
                request.getSession().setAttribute("ListDetalleAlumnos", detallePeriodoAlumnos);
                response.sendRedirect("modulos/administrador/administrador_main.jsp");
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);

            }
            break;
            case 3: {
                detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);
                detallePeriodoCursos = periodoCursoManag.findByIdPeriodo(periodo);
                listAlumnoCurso = detalleAlumnoCursoManag.Report();
                request.getSession().setAttribute("ListAlumnos", detallePeriodoAlumnos);
                request.getSession().setAttribute("ListPeriodoCursos", detallePeriodoCursos);
                request.getSession().setAttribute("ListAlumnoCurso", listAlumnoCurso);

                response.sendRedirect("modulos/administrador/administrador_report_cursos_notas.jsp");
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);
            }
            break;
            case 4: {

                detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);
                response.sendRedirect("modulos/administrador/administrador_report_consolidado.jsp");
                request.getSession().setAttribute("ListAlumnos", detallePeriodoAlumnos);
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);

            }
            break;

            case 5: {

                
                 listDetalleSedeTrabajador=detalleSedeTrabajadroManager.Report();
                response.sendRedirect("modulos/administrador/administrador_report_trabajador.jsp");
                request.getSession().setAttribute("ListTrabajador", listDetalleSedeTrabajador);

                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);


            }
            break;

            /*
             * ir al formatio de registro del NUEVO TRABJADOR
             */

            case 6: {

                response.sendRedirect("modulos/administrador/administrador_form_add_trabajador.jsp");

                listDetallePeriodoSede = detallePeriodoSedeManag.findByIdPeriodoIdSede(periodo);

                request.getSession().setAttribute("ListDetallePeriodoSede", listDetallePeriodoSede);
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);


            }
            break;

            /*
             * agregar trabajadores
             */

            case 7: {
                String idTrabajador = trabajadorManag.ObtenerId();

                trabajadorTo.setIdTrabajador(idTrabajador);
                trabajadorTo.setNombre(request.getParameter("nombre"));
                trabajadorTo.setApellidoPaterno(request.getParameter("apellidoPa"));
                trabajadorTo.setApellidoMaterno(request.getParameter("apellidoMa"));
                trabajadorTo.setFechaNacimiento(request.getParameter("fechaNacimiento"));
                trabajadorTo.setDni(request.getParameter("dni"));
                trabajadorTo.setDireccion(request.getParameter("direccion"));
                trabajadorTo.setTelefono(request.getParameter("telefono"));
                trabajadorTo.setUsuario(request.getParameter("usuario"));
                trabajadorTo.setContraseña(request.getParameter("contraseña"));
                trabajadorTo.setEstado(request.getParameter("estado"));
                trabajadorTo.setSexo(request.getParameter("sexo"));
                trabajadorTo.setEstadoCivil(request.getParameter("estadoCivil"));
                trabajadorTo.setEmail(request.getParameter("email"));
                trabajadorTo.setNacionalidad(request.getParameter("nacionalidad"));
                trabajadorManag.Add(trabajadorTo);

                String idPeriodoTrabajador = periodoTrabajadorManag.ObtenerId();

                detallePeriodoTrabajador.setIdDetallePeriodoTrabajador(idPeriodoTrabajador);
                detallePeriodoTrabajador.setIdTrabajador(idTrabajador);
                detallePeriodoTrabajador.setIdPeriodo(periodo);
                detallePeriodoTrabajador.setRol("trabajador");
                periodoTrabajadorManag.Add(detallePeriodoTrabajador);

                String idSedetrabajador = detalleSedeTrabajadroManager.ObtenerId();

                detalleSedeTrabajador.setIdDetalleSedeTrabajador(idSedetrabajador);
                detalleSedeTrabajador.setIdDetallePeriodoTrabajador(idPeriodoTrabajador);
                detalleSedeTrabajador.setIdDetallePeriodoSede(request.getParameter("LugarSede"));

                detalleSedeTrabajadroManager.Add(detalleSedeTrabajador);



                detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);
                request.getSession().setAttribute("ListDetalleAlumnos", detallePeriodoAlumnos);
                response.sendRedirect("modulos/administrador/administrador_main.jsp");

                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);

            }
            break;

            case 8: {

                listSede = sedeManag.Report();
                request.getSession().setAttribute("ListSede", listSede);
                response.sendRedirect("modulos/administrador/administrador_report_sede.jsp");

                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);




            }
            break;


            /*
             * ir al formulario de datos de NUEVA SEDE
             */

            case 9: {

                response.sendRedirect("modulos/administrador/administrador_form_add_sede.jsp");

                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);

            }
            break;
            /*
             * sedes agregar Sede
             */
            case 10: {

                String idSede = sedeManag.ObtenerId();
                sedeTo.setIdSede(idSede);
                sedeTo.setNombre(request.getParameter("nombre"));
                sedeTo.setDireccion(request.getParameter("direccion"));
                sedeTo.setCiudad(request.getParameter("ciudad"));
                sedeTo.setEstado("activo");
                sedeManag.Add(sedeTo);

                String idDetallePeriodoSede = detallePeriodoSedeManag.ObtenerId();

                detallePeriodoSede.setIdDetallePeriodoSede(idDetallePeriodoSede);
                detallePeriodoSede.setIdPeriodo(periodo);
                detallePeriodoSede.setIdSede(idSede);

                detallePeriodoSedeManag.Add(detallePeriodoSede);

                listSede = sedeManag.Report();
                request.getSession().setAttribute("ListSede", listSede);
                response.sendRedirect("modulos/administrador/administrador_report_sede.jsp");
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);

            }
            break;
//ir a reporte de EXAMENES SEMANALES
            case 11: {

                examenes = examenesManag.Report();
                request.getSession().setAttribute("ListExamenes", examenes);
                response.sendRedirect("modulos/administrador/administrador_report_examenes.jsp");
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);



            }
            break;
//                ir a form examen

            case 12: {
                response.sendRedirect("modulos/administrador/administrador_form_add_examenes.jsp");
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);



            }
            break;



//                agrega nuevo EXAMEN SEMANA
            case 13: {

                String idExamenes = examenesManag.ObtenerId();

                examenesTo.setIdExamenes(idExamenes);
                examenesTo.setNumSemana(request.getParameter("numSemana"));
                examenesTo.setFechaExamen(request.getParameter("fechaExamen"));
                examenesTo.setIdPeriodo(periodo);

                examenesManag.Add(examenesTo);

                detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);

                for (int y = 0; y < detallePeriodoAlumnos.size(); y++) {
                    String idDetalleAlumnoExamen = detalleAlumnoExamenmanag.ObtenerId();

                    DetalleAlumnoExamen box = new DetalleAlumnoExamen();

                    box.setIdDetalleAlumnoExamen(idDetalleAlumnoExamen);
                    box.setIdDetallePeriodoAlumno(detallePeriodoAlumnos.get(y).getIdDetallePeriodoAlumno());
                    box.setIdExamenes(idExamenes);
                    box.setNotaExamen("0");

                    detalleAlumnoExamenmanag.Add(box);

                }

                request.getSession().setAttribute("ListExamenes", examenes);
                response.sendRedirect("modulos/administrador/administrador_report_examenes.jsp");
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);
            }
            break;
            case 14: {
                detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);
                detallePeriodoCursos = periodoCursoManag.findByIdPeriodo(periodo);
                listAlumnoCurso = detalleAlumnoCursoManag.Report();
                request.getSession().setAttribute("ListAlumnos", detallePeriodoAlumnos);
                request.getSession().setAttribute("ListPeriodoCursos", detallePeriodoCursos);
                request.getSession().setAttribute("ListAlumnoCurso", listAlumnoCurso);

                response.sendRedirect("modulos/administrador/administrador_report_curso.jsp");
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);
            }
            break;
            case 15: {
                detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);
                detallePeriodoCursos = periodoCursoManag.findByIdPeriodo(periodo);
                listAlumnoCurso = detalleAlumnoCursoManag.Report();

                request.getSession().setAttribute("ListAlumnos", detallePeriodoAlumnos);
                request.getSession().setAttribute("ListPeriodoCursos", detallePeriodoCursos);
                request.getSession().setAttribute("ListAlumnoCurso", listAlumnoCurso);


                response.sendRedirect("modulos/administrador/administrador_report_curso.jsp");

                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);
            }
            break;
            case 16: {
                System.out.println("Elvis Ali VIlca");

                detallePeriodoAlumnos = periodoAlumnoManag.Search(request.getParameter("nameSede").toString(), request.getParameter("nameCarrera").toString(),periodo);
                //detallePeriodoAlumnos = periodoAlumnoManag.findByIdPeriodo(periodo);
                request.getSession().setAttribute("ListDetalleAlumnos", detallePeriodoAlumnos);

                response.sendRedirect("modulos/administrador/administrador_main.jsp");

                System.out.println("Elvis Ali VIlca " + usuario);
                request.getSession().setAttribute("rol", rol);
                request.getSession().setAttribute("usuario", usuario);
                request.getSession().setAttribute("periodo", periodo);
                request.getSession().setAttribute("sede", sede);

            }
            break;





        }












    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
